home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
051-075
/
disk_052
/
tek4010
/
toasc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
4KB
|
121 lines
/****************************************************
* vt100 emulator - window/keyboard support
*
* 860823 DBW - Integrated and rewrote lots of code
* v2.0 860809 DBW - Major rewrite
* v1.1 860720 DBW - Switches, 80 cols, colors, bug fixes
* v1.0 860712 DBW - First version released
*
****************************************************/
#define MODULE_WINDOW 1
#include "vt100.h"
/************************************************
* function to take raw key data and convert it
* into ascii chars
**************************************************/
int toasc(code,local)
unsigned int code;
int local;
{
static int ctrl = FALSE;
static int shift = FALSE;
static int capsl = FALSE;
char c;
static char keys[75] = {
'`','1','2','3','4','5','6','7','8','9','0','-' ,
'=','\\', 0, '0','q','w','e','r','t','y','u','i','o' ,
'p','[',']', 0, '1','2','3','a','s','d','f','g','h' ,
'j','k','l',';','\'', 0, 0, '4','5','6', 0, 'z','x','c','v',
'b','n','m',44,'.','/', 0, '.','7','8','9',' ',8,
'\t',13,13,27,127,0,0,0,'-' } ;
switch ( code )
{
case 98: capsl = TRUE; c = 0;break;
case 226: capsl = FALSE;c = 0;break;
case 99: ctrl = TRUE; c = 0;break;
case 227: ctrl = FALSE; c = 0;break;
case 96:
case 97: shift = TRUE; c = 0;break;
case 224:
case 225: shift = FALSE;c = 0;break;
case 0x50:
case 0x51:
case 0x52:
case 0x53:
case 0x54:
case 0x55:
case 0x56:
case 0x57:
case 0x58:
case 0x59: c = 0;
if (shift) sendstring(p_F[code - 0x50]);
else sendstring(p_f[code - 0x50]);
break;
case 0x0f: c=0; sendstring("\033Op"); break;
case 0x1d: c=0; sendstring("\033Oq"); break;
case 0x1e: c=0; sendstring("\033Or"); break;
case 0x1f: c=0; sendstring("\033Os"); break;
case 0x2d: c=0; sendstring("\033Ot"); break;
case 0x2e: c=0; sendstring("\033Ou"); break;
case 0x2f: c=0; sendstring("\033Ov"); break;
case 0x3d: c=0; sendstring("\033Ow"); break;
case 0x3e: c=0; sendstring("\033Ox"); break;
case 0x3f: c=0; sendstring("\033Oy"); break;
case 0x43: c=0; sendstring("\033OM"); break;
case 0x4a: c=0; sendstring("\033Ol"); break;
case 0x5f: c=0; sendstring("\033Om"); break;
case 0x3c: c=0; sendstring("\033On"); break;
case 0x4c: c=0; sendstring("\033[A"); break;
case 0x4d: c=0; sendstring("\033[B"); break;
case 0x4e: c=0; sendstring("\033[C"); break;
case 0x4f: c=0; sendstring("\033[D"); break;
default:
if (code < 75) c = keys[code];
else c = 0;
}
/* add modifiers to the keys */
if (c != 0) {
if (shift) {
if ((c <= 'z') && (c >= 'a')) c -= 32;
else
switch( c ) {
case '[': c = '{'; break;
case ']': c = '}'; break;
case '\\': c = '|'; break;
case '\'': c = '"'; break;
case ';': c = ':'; break;
case '/': c = '?'; break;
case '.': c = '>'; break;
case ',': c = '<'; break;
case '`': c = '~'; break;
case '=': c = '+'; break;
case '-': c = '_'; break;
case '1': c = '!'; break;
case '2': c = '@'; break;
case '3': c = '#'; break;
case '4': c = '$'; break;
case '5': c = '%'; break;
case '6': c = '^'; break;
case '7': c = '&'; break;
case '8': c = '*'; break;
case '9': c = '('; break;
case '0': c = ')'; break;
default: break;
}
}
else if (capsl && (c <= 'z') && (c >= 'a')) c -= 32;
}
if (ctrl) {
if (c >= '`' && c <= 127) c -= 96;
else if (c >= '@' && c <= '_') c -= 64;
}
if (c != 0 && (!local)) sendchar(c);
return((int)c);
}